Three-dimensional interaction system

ABSTRACT

Among other things, embodiments of the present disclosure improve the functionality of computer imaging software and systems by facilitating the manipulation of virtual content displayed in conjunction with images of real-world objects and environments. Embodiments of the present disclosure allow virtual objects to be moved relative to a real-world environment and manipulated in other ways.

PRIORITY

This application is a continuation of U.S. patent application Ser. No.15/804,550, filed Nov. 6, 2017, which application claims the benefit ofpriority of U.S. Provisional Patent Application Ser. No. 62/449,451,filed on Jan. 23, 2017; and U.S. Provisional Patent Application Ser. No.62/473,933, filed on Mar. 20, 2017, which are hereby incorporated byreference herein in their entirety.

BACKGROUND

Augmented reality (AR) refers to supplementing the view of real-worldobjects and environments with computer-generated graphics content.Embodiments of the present disclosure address, among other things, themanipulation of virtual 3D objects in an AR environment.

BRIEF DESCRIPTION OF THE DRAWINGS

In the drawings, which are not necessarily drawn to scale, like numeralsmay describe similar components in different views. Like numerals havingdifferent letter suffixes may represent different instances of similarcomponents. Some embodiments are illustrated by way of example, and notlimitation, in the figures of the accompanying drawings in which:

FIG. 1 is a block diagram showing an example messaging system forexchanging data (e.g., messages and associated content) over a network.

FIG. 2 is block diagram illustrating further details regarding amessaging system, according to exemplary embodiments.

FIG. 3 is a schematic diagram illustrating data which may be stored inthe database of the messaging server system, according to variousexemplary embodiments.

FIG. 4 is a flow diagram of an exemplary process according to variousaspects of the disclosure.

FIGS. 5A-5W are screenshots and diagrams illustrating various aspects ofthe systems and methods of the present disclosure.

FIG. 6 is a block diagram illustrating a representative softwarearchitecture, which may be used in conjunction with various hardwarearchitectures herein described.

FIG. 7 is a block diagram illustrating components of a machine,according to some exemplary embodiments, able to read instructions froma machine-readable medium (e.g., a machine-readable storage medium) andperform any one or more of the methodologies discussed herein.

DETAILED DESCRIPTION

The description that follows includes systems, methods, techniques,instruction sequences, and computing machine program products thatembody illustrative embodiments of the disclosure. In the followingdescription, for the purposes of explanation, numerous specific detailsare set forth in order to provide an understanding of variousembodiments of the inventive subject matter. It will be evident,however, to those skilled in the art, that embodiments of the inventivesubject matter may be practiced without these specific details. Ingeneral, well-known instruction instances, protocols, structures, andtechniques are not necessarily shown in detail.

Among other things, embodiments of the present disclosure improve thefunctionality of computer imaging software and systems by facilitatingthe manipulation of virtual content displayed in conjunction with imagesof real-world objects and environments. Embodiments of the presentdisclosure allow virtual objects to be moved relative to a real-worldenvironment and manipulated in other ways.

FIG. 1 is a block diagram showing an example of a messaging system 100for exchanging data (e.g., messages and associated content) over anetwork. The messaging system 100 includes multiple client devices 102,each of which hosts a number of applications including a messagingclient application 104. Each messaging client application 104 iscommunicatively coupled to other instances of the messaging clientapplication 104 and a messaging server system 108 via a network 106(e.g., the Internet). As used herein, the term “client device” may referto any machine that interfaces to a communications network (such asnetwork 106) to obtain resources from one or more server systems orother client devices. A client device may be, but is not limited to, amobile phone, desktop computer, laptop, portable digital assistants(PDAs), smart phones, tablets, ultra books, netbooks, laptops,multi-processor systems, microprocessor-based or programmable consumerelectronics, game consoles, set-top boxes, or any other communicationdevice that a user may use to access a network.

In the example shown in FIG. 1 , each messaging client application 104is able to communicate and exchange data with another messaging clientapplication 104 and with the messaging server system 108 via the network106. The data exchanged between messaging client applications 104, andbetween a messaging client application 104 and the messaging serversystem 108, includes functions (e.g., commands to invoke functions) aswell as payload data (e.g., text, audio, video or other multimediadata).

The network 106 may include, or operate in conjunction with, an ad hocnetwork, an intranet, an extranet, a virtual private network (VPN), alocal area network (LAN), a wireless LAN (WLAN), a wide area network(WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), theInternet, a portion of the Internet, a portion of the Public SwitchedTelephone Network (PSTN), a plain old telephone service (POTS) network,a cellular telephone network, a wireless network, a Wi-Fi® network,another type of network, or a combination of two or more such networks.For example, a network or a portion of a network may include a wirelessor cellular network and the coupling may be a Code Division MultipleAccess (CDMA) connection, a Global System for Mobile communications(GSM) connection, or other type of cellular or wireless coupling. Inthis example, the coupling may implement any of a variety of types ofdata transfer technology, such as Single Carrier Radio TransmissionTechnology (1×RTT), Evolution-Data Optimized (EVDO) technology, GeneralPacket Radio Service (GPRS) technology, Enhanced Data rates for GSMEvolution (EDGE) technology, third Generation Partnership Project (3GPP)including 3G, fourth generation wireless (4G) networks, Universal MobileTelecommunications System (UMTS), High Speed Packet Access (HSPA),Worldwide Interoperability for Microwave Access (WiMAX), Long TermEvolution (LTE) standard, others defined by various standard settingorganizations, other long range protocols, or other data transfertechnology.

The messaging server system 108 provides server-side functionality viathe network 106 to a particular messaging client application 104. Whilecertain functions of the messaging system 100 are described herein asbeing performed by either a messaging client application 104 or by themessaging server system 108, it will be appreciated that the location ofcertain functionality either within the messaging client application 104or the messaging server system 108 is a design choice. For example, itmay be technically preferable to initially deploy certain technology andfunctionality within the messaging server system 108, but to latermigrate this technology and functionality to the messaging clientapplication 104 where a client device 102 has a sufficient processingcapacity.

The messaging server system 108 supports various services and operationsthat are provided to the messaging client application 104. Suchoperations include transmitting data to, receiving data from, andprocessing data generated by the messaging client application 104. Thisdata may include, message content, client device information,geolocation information, media annotation and overlays, message contentpersistence conditions, social network information, and live eventinformation, as examples. Data exchanges within the messaging system 100are invoked and controlled through functions available via userinterfaces (Uls) of the messaging client application 104.

Turning now specifically to the messaging server system 108, anApplication Program Interface (API) server 110 is coupled to, andprovides a programmatic interface to, an application server 112. Theapplication server 112 is communicatively coupled to a database server118, which facilitates access to a database 120 in which is stored dataassociated with messages processed by the application server 112.

Dealing specifically with the Application Program Interface (API) server110, this server receives and transmits message data (e.g., commands andmessage payloads) between the client device 102 and the applicationserver 112. Specifically, the Application Program Interface (API) server110 provides a set of interfaces (e.g., routines and protocols) that canbe called or queried by the messaging client application 104 in order toinvoke functionality of the application server 112. The ApplicationProgram Interface (API) server 110 exposes various functions supportedby the application server 112, including account registration, loginfunctionality, the sending of messages, via the application server 112,from a particular messaging client application 104 to another messagingclient application 104, the sending of electronic media files (e.g.,electronic images or video) from a messaging client application 104 tothe messaging server application 114, and for possible access by anothermessaging client application 104, the setting of a collection of mediadata (e.g., story), the retrieval of a list of friends of a user of aclient device 102, the retrieval of such collections, the retrieval ofmessages and content, the adding and deletion of friends to a socialgraph, the location of friends within a social graph, opening andapplication event (e.g., relating to the messaging client application104).

The application server 112 hosts a number of applications andsubsystems, including a messaging server application 114, an imageprocessing system 116 and a social network system 122. The messagingserver application 114 implements a number of message processingtechnologies and functions, particularly related to the aggregation andother processing of content (e.g., textual and multimedia contentincluding images and video clips) included in messages received frommultiple instances of the messaging client application 104. As will bedescribed in further detail, the text and media content from multiplesources may be aggregated into collections of content (e.g., calledstories or galleries). These collections are then made available, by themessaging server application 114, to the messaging client application104. Other processor and memory intensive processing of data may also beperformed server-side by the messaging server application 114, in viewof the hardware requirements for such processing.

The application server 112 also includes an image processing system 116that is dedicated to performing various image processing operations,typically with respect to electronic images or video received within thepayload of a message at the messaging server application 114.

The social network system 122 supports various social networkingfunctions services, and makes these functions and services available tothe messaging server application 114. To this end, the social networksystem 122 maintains and accesses an entity graph 304 within thedatabase 120. Examples of functions and services supported by the socialnetwork system 122 include the identification of other users of themessaging system 100 with which a particular user has relationships oris “following”, and also the identification of other entities andinterests of a particular user.

The application server 112 is communicatively coupled to a databaseserver 118, which facilitates access to a database 120 in which isstored data associated with messages processed by the messaging serverapplication 114.

Some embodiments may include one or more wearable devices, such as apendant with an integrated camera that is integrated with, incommunication with, or coupled to, a client device 102. Any desiredwearable device may be used in conjunction with the embodiments of thepresent disclosure, such as a watch, eyeglasses, goggles, a headset, awristband, earbuds, clothing (such as a hat or jacket with integratedelectronics), a clip-on electronic device, or any other wearabledevices.

FIG. 2 is block diagram illustrating further details regarding themessaging system 100, according to exemplary embodiments. Specifically,the messaging system 100 is shown to comprise the messaging clientapplication 104 and the application server 112, which in turn embody anumber of some subsystems, namely an ephemeral timer system 202, acollection management system 204 and an annotation system 206.

The ephemeral timer system 202 is responsible for enforcing thetemporary access to content permitted by the messaging clientapplication 104 and the messaging server application 114. To this end,the ephemeral timer system 202 incorporates a number of timers that,based on duration and display parameters associated with a message, orcollection of messages (e.g., a SNAPCHAT® story), selectively displayand enable access to messages and associated content via the messagingclient application 104.

The collection management system 204 is responsible for managingcollections of media (e.g., collections of text, image, video and audiodata). In some examples, a collection of content (e.g., messages,including images, video, text, and audio) may be organized into an“event gallery” or an “event story.” Such a collection may be madeavailable for a specified time period, such as the duration of an eventto which the content relates. For example, content relating to a musicconcert may be made available as a “story” for the duration of thatmusic concert. The collection management system 204 may also beresponsible for publishing an icon that provides notification of theexistence of a particular collection to the user interface of themessaging client application 104.

The collection management system 204 furthermore includes a curationinterface 208 that allows a collection manager to manage and curate aparticular collection of content. For example, the curation interface208 enables an event organizer to curate a collection of contentrelating to a specific event (e.g., delete inappropriate content orredundant messages). Additionally, the collection management system 204employs machine vision (or image recognition technology) and contentrules to automatically curate a content collection. In certainembodiments, compensation may be paid to a user for inclusion of usergenerated content into a collection. In such cases, the curationinterface 208 operates to automatically make payments to such users forthe use of their content.

The annotation system 206 provides various functions that enable a userto annotate or otherwise modify or edit media content associated with amessage. For example, the annotation system 206 provides functionsrelated to the generation and publishing of media overlays for messagesprocessed by the messaging system 100. The annotation system 206operatively supplies a media overlay (e.g., a SNAPCHAT® filter) to themessaging client application 104 based on a geolocation of the clientdevice 102. In another example, the annotation system 206 operativelysupplies a media overlay to the messaging client application 104 basedon other information, such as, social network information of the user ofthe client device 102. A media overlay may include audio and visualcontent and visual effects. Examples of audio and visual content includepictures, texts, logos, animations, and sound effects. An example of avisual effect includes color overlaying. The audio and visual content orthe visual effects can be applied to a media content item (e.g., animage or video) at the client device 102. For example, the media overlayincluding text that can be overlaid on top of a photograph/electronicimage generated by the client device 102. In another example, the mediaoverlay includes an identification of a location overlay (e.g., Venicebeach), a name of a live event, or a name of a merchant overlay (e.g.,Beach Coffee House). In another example, the annotation system 206 usesthe geolocation of the client device 102 to identify a media overlaythat includes the name of a merchant at the geolocation of the clientdevice 102. The media overlay may include other indicia associated withthe merchant. The media overlays may be stored in the database 120 andaccessed through the database server 118.

In some exemplary embodiments, as discussed in more detail below,embodiments of the present disclosure may generate, display, distribute,and apply media overlays to media content items. For example,embodiments may utilize media content items generated by a client device102 (e.g., an image or video captured using a digital camera coupled tothe client device 102) to generate media overlays that can be applied toother media content items.

FIG. 3 is a schematic diagram 300 illustrating data 300 that is storedin the database 120 of the messaging server system 108, according tocertain exemplary embodiments. While the content of the database 120 isshown to comprise a number of tables, the data could be stored in othertypes of data structures (e.g., as an object-oriented database).

The database 120 includes message data stored within a message table314. The entity table 302 stores entity data, including an entity graph304. Entities for which records are maintained within the entity table302 may include individuals, corporate entities, organizations, objects,places, events etc. Regardless of type, any entity regarding which themessaging server system 108 stores data may be a recognized entity. Eachentity is provided with a unique identifier, as well as an entity typeidentifier (not shown).

The entity graph 304 furthermore stores information regardingrelationships and associations between entities. Such relationships maybe social, professional (e.g., work at a common corporation ororganization) interested-based or activity-based, merely for example.

The database 120 also stores annotation data, in the example form offilters, in an annotation table 312. Filters for which data is storedwithin the annotation table 312 are associated with and applied tovideos (for which data is stored in a video table 310) or images (forwhich data is stored in an image table 308). Filters, in one example,are overlays that are displayed as overlaid on an image or video duringpresentation to a recipient user. Filters may be of varies types,including a user-selected filters from a gallery of filters presented toa sending user by the messaging client application 104 when the sendinguser is composing a message.

Other types of filters include geolocation filters (also known asGeofilters) which may be presented to a sending user based on geographiclocation. For example, geolocation filters specific to a neighborhood orspecial location may be presented within a user interface by themessaging client application 104, based on geolocation informationdetermined by a GPS unit of the client device 102. Another type offilter is a data filter, which may be selectively presented to a sendinguser by the messaging client application 104, based on other inputs orinformation gathered by the client device 102 during the messagecreation process. Example of data filters include current temperature ata specific location, a current speed at which a sending user istraveling, battery life for a client device 102 or the current time.Other annotation data that may be stored within the image table 308 isso-called “Lens” data. A “Lens” may be a real-time special effect andsound that may be added to an image or a video.

As mentioned above, the video table 310 stores video data which, in oneembodiment, is associated with messages for which records are maintainedwithin the message table 314. Similarly, the image table 308 storesimage data associated with messages for which message data is stored inthe entity table 302. The entity table 302 may associate variousannotations from the annotation table 312 with various images and videosstored in the image table 308 and the video table 310.

A story table 306 stores data regarding collections of messages andassociated image, video or audio data, which are compiled into acollection (e.g., a SNAPCHAT® story or a gallery). The creation of aparticular collection may be initiated by a particular user (e.g., eachuser for which a record is maintained in the entity table 302). A usermay create a “personal story” in the form of a collection of contentthat has been created and sent/broadcast by that user. To this end, theuser interface of the messaging client application 104 may include anicon that is user selectable to enable a sending user to add specificcontent to his or her personal story.

A collection may also constitute a “live story,” which is a collectionof content from multiple users that is created manually, automaticallyor using a combination of manual and automatic techniques. For example,a “live story” may constitute a curated stream of user-submitted contentfrom varies locations and events. Users, whose client devices havelocation services enabled and are at a common location event at aparticular time may, for example, be presented with an option, via auser interface of the messaging client application 104, to contributecontent to a particular live story. The live story may be identified tothe user by the messaging client application 104, based on his or herlocation. The end result is a “live story” told from a communityperspective.

A further type of content collection is known as a “location story,”which enables a user whose client device 102 is located within aspecific geographic location (e.g., on a college or university campus)to contribute to a particular collection. In some embodiments, acontribution to a location story may require a second degree ofauthentication to verify that the end user belongs to a specificorganization or other entity (e.g., is a student on the universitycampus).

Embodiments of the present disclosure may generate and presentcustomized images for use within electronic messages/communications suchas short message service (SMS) or multimedia message service (MMS) textsand emails. The customized images may also be utilized in conjunctionwith the SNAPCHAT stories, SNAPCHAT filters, and ephemeral messagingfunctionality discussed herein.

FIG. 4 depicts an exemplary process according to various aspects of thepresent disclosure. In this example, method 400 includes displaying animage of a real-world scene (e.g., captured via the camera of a mobilecomputing device) on the display of the computing device (405), mappingand displaying a virtual object in the real-world scene (410), receivinginput from a user (415), and modifying a characteristic of the virtualobject (420). The steps of method 400 may be performed in whole or inpart, may be performed in conjunction each other as well as with some orall of the steps in other methods, and may be performed by any number ofdifferent systems, such as the systems described in FIGS. 1 and 7 .

In method 400, the system displays (405) a two-dimensional (2D) image ofa three-dimensional (3D) real-world scene on the display screen of acomputing device. In some embodiments, the image may be a still image orpreviously-recorded video (e.g., previously captured by the camera ofthe computing device). In other embodiments, the image may be part of alive video or stream captured through the camera and displayed on thedisplay screen. In this context, an image of a “real-world scene” refersto an image of tangible, physical objects, while a “virtual object”refers to a computer-generated object. In FIGS. 5A-5C, for example, theimage captured via the camera of the user's mobile device displaysvarious physical objects of a real-world scene, such as the floor,chairs, and other furniture, while FIGS. 5B and 5C further include avirtual object 505 (a smiling rainbow) that is mapped to the real-worldscene and displayed in conjunction with the real-world objects (asdescribed in more detail below).

The system may map a virtual object to a three-dimensional real-worldscene and display (410) the virtual object within the two-dimensionalimage displayed on the display screen of the computing device. Anynumber and type of different virtual objects may be mapped and displayedwithin the image, including text, animations, avatars of users, andother objects. In the screenshots shown in FIGS. 5B-5E, for instance,the image includes a virtual object 505 comprising a 3D smiling rainbowmapped to the real-world scenes captured by the camera of the mobilecomputing device. In FIG. 5F, the virtual object 510 is a cat.

Embodiments of the present disclosure allow a user to place virtualobjects in any selected position within the image, as well as tointeract with the objects. In FIG. 5A, for example, the user selects avirtual object from a gallery of objects displayed at the bottom of thescreen, pressing selection 508 for a rainbow virtual object and thentapping the screen with the user's thumb. In FIG. 5B, in response to theuser's input, the system maps the virtual object 505 to the real-worldscene, identifying the floor of the real-world scene as the positioncorresponding to the user's selection, and thus mapping the virtualobject 505 to the selected position on the floor.

The system may receive input from a user (415) and modify acharacteristic of the virtual object in response to the input (420)and/or in response to other conditions and events. Characteristics ofthe virtual object that may be modified include, for example, theposition of the virtual object in the real-world scene. Virtual objectsand other content in an image can be manipulated in a variety ofdifferent ways, including adding new virtual objects to an image,removing virtual objects from an image, repositioning virtual content,and modifying the virtual content (e.g., changing its size, scale,direction/orientation/rotation, color, shape, etc.). A variety ofvirtual content may be displayed, including text, video, and images.Additionally, the system may modify non-visual characteristics of thevirtual object, such as an internal state value of the virtual object.The visual characteristics of different portions of the virtual objectmay be modified differently from each other. In FIGS. 5H-5I, forexample, the shape of a virtual object may be transformed between asphere 514 and a cube 516 in response to various inputs or events. Asshown in FIGS. 5I and 5J, the scale of a virtual object may be variedindependently of its position within the real-world scene. Between FIG.51 and FIG. 5J, the position of the virtual object remains constant,though the scale of virtual object 518 is increased from the scale ofvirtual object 516.

In FIGS. 5C-5E, the user selects the virtual object 505 by pressing theuser's thumb on the touchscreen on the virtual object 505 (FIG. 5C). Theuser may hold his/her thumb on the touchscreen and drag the virtualobject 505 to reposition it. For example, in FIG. 5D the user is swipingthe user's thumb to the left, and the system moves the object with theuser's swipe laterally to the left. In FIG. 5E, the user is swiping theuser's thumb up, and the system repositions the virtual object 505deeper within the real-world scene as a result. In other examples, theuser may select the virtual object 505 by tapping on it, then moving thevirtual object by tapping on another location on the touchscreen.

The system may identify the selection of a virtual object by a user bydetermining an intersection between a selection position on the user'sdisplay and the mapped position of the virtual object in real-worldspace. FIG. 5U illustrates an example where a user touches an area onthe screen of the user's computing device where the virtual object islocated. In response, the system raycasts (i.e., projects) the 2D touchposition on the computing device screen to the virtual object's positionin the 3D real world scene captured by the computing device's camera todetermine whether they intersect. In this specific example, the systemcomputes the offset from the object's origin on the display screen tothe intersection point on the axis-aligned bounding-box (aabb).Additionally, the system computes the object orientation about theup-axis (y) relative to the camera.

In some embodiments, movement of the virtual object from a firstposition to a second position includes determining a frustum-relativeorientation for the virtual object and maintaining the frustum-relativeorientation for the virtual object between the first position and thesecond position. FIG. 5V illustrates an example of a frustumintersection with a ground plane producing a trapezoidal two-dimensionalplane having a left frustum plane and a right frustum plane. In FIG. 5W,frustum surface radials are defined as radial lines running along thetrapezoid, where “L” and “R” are the intersections between the left andright frustum planes with the surface, respectively. The inner radialsare interpolated.

Movement of a user's computing device may be interpreted in conjunctionwith selection of a virtual object to modify a characteristic of thevirtual object (such as the virtual object's position in real-worldspace). FIG. 5K illustrates an example of a user selecting a virtualobject 524 on the screen of the user's mobile computing device. In thisexample, the position of the virtual object 524 is depicted at theposition in real-world space to which it is mapped. In FIG. 5L, the userselects the virtual object on the screen and moves the user's computingdevice from a first position 526 to a second position 528, causing thevirtual object to be re-mapped in three-dimensional real-world spacefrom position 530 to position 532. The user physically walking aroundwith the virtual object selected may also translate the virtual objectfrom one position to another. Similarly, in FIG. 5M, the user slides hisfinger from a first position on the screen 534 downwards to a secondposition on the screen 536, adjusting the depth of the virtual object inthe image from a first position 538 at radius R1 to a second position540 at radius R2. In some embodiments, the system may identify a spatiallimit in the three-dimensional real-world scene, such as the ground or aphysical object (e.g., a table or wall) and restrict movement of thevirtual object based on the spatial limit. In a particular example, thesystem may prevent a virtual object being moved below the ground planeor through a wall or other physical object.

The system may operate in conjunction with any of a variety of differentuser gestures and inputs. Additionally, while inputs from the user aredescribed herein with reference to a user interacting with atouchscreen, embodiments of the present disclosure may receive inputs ina variety of other input formats, such as input received from akeyboard, mouse, voice instructions via a microphone, etc.

FIG. 5N is a diagram of an exemplary software architecture that may beused in conjunction with some embodiments for handling input from auser. In this example, touch data and tracking data is received by atouch processing handler. Manipulation logic units are applied in layers(e.g., translation, scaling, rotating, etc.). The manipulation layeroutputs are accumulated and applied as object transformations (e.g.,Object 1 and Object 2). In this example, each manipulation unit consumesa particular type of touch/gesture as input and produces an augment asoutput. Units can be combined to produce a unique control scheme.Examples of manipulation units include units for scale, rotation,swiveling, translation, height adjustment, and depth adjustment.

FIG. 5O is an example of a software process diagram that may be employedby embodiments of the present disclosure. In this example, touch data isinterpreted by gesture recognizer in the input thread, and sent to agesture event queue. The manipulation manager executes in the corethread, consuming the event buffer and translating the gesture data intothree-dimensional transformations applied to real-world objects. Inconjunction with the manipulation units illustrated in FIG. 5N, thesystem may interpret a variety of touchscreen gestures made by a user.For example, the system may implement a two-dimensional screencoordinate system with left and right movement along an “x” axis and upand down movement along a “y” axis. The system may likewise implement athree-dimensional coordinate system for the real-world scene, with, forexample, the ground plane defined in an “xz” plane (width and depth) andheight along a “y” axis. In this example, translation actions on avirtual object may include identifying the “x” and “y” components of aone-finger scroll gesture by the user and applying the gesture to atranslation of the object in the “xz” plane of the real-world scene. Ina particular example of virtual object translation, referring again toFIGS. 5C-5E, the user presses a single finger (the user's thumb) on thetouch screen to select the virtual object 505 (FIG. 5C) and slides theuser's thumb to the left to move the virtual object 505 to the left(FIG. 5D) and up to adjust the position of the virtual object 505 deeperin the image (FIG. 5E). In alternate embodiments, the system mayinterpret a single-finger movement on the touch screen to adjust theposition of the virtual object in only the x and y planes (leaving depthunchanged) while interpreting a two-finger selection and movement of thevirtual object by the user to adjust the depth of the virtual object(e.g., deeper or shallower in the real-world scene). The system mayoperate in conjunction with a variety of different inputs to manipulatethe position of the virtual object within the real-world scene.

A virtual object may be mapped to a three-dimensional real-world scenein a variety of ways. In one example, the system generates a matrixcontaining image data from the camera of the user's mobile computingdevice and movement data received from the device's inertial measurementsensor. The movement of a computing device (such as a smartphone) may betracked by the system to add, remove, and/or modify virtual content tothe real-world scene. For example, the system may implement a virtualpaintbrush utility whereby a user moves the user's mobile device inthree-dimensional space, leaving a trail of virtual lines on the screenand allowing the user to generate a virtual painting displayed inconjunction with a real-world scene. The system may track the movementof the device in three-dimensions, (e.g., tracking forward and backwardmovements of the computing device to add depth to the painting), to givethe virtual painting a three-dimensional appearance.

FIGS. 5P and 5Q illustrate one example of a matrix generated in responseto a user pressing on the touchscreen at a first position (reflected inthe matrix as “touchStartEvent”) and sliding the user's fingerdiagonally across the screen (reflected in the matrix as the“touchMoveEvents”) to a second position (reflected in the matrix as the“touchEndEvent”). FIGS. 5S and 5T illustrate another example where theuser performs a two-fingered rotation gesture on the screen to rotate avirtual object. In this example, the user presses on the screen at afirst position (“rotateStartEvent”), and rotates the user's fingersclockwise (“rotateUpdateEvents”) to a second position(“rotateEndEvent”).

In conjunction with repositioning the virtual object 505 deeper orshallower within a real-world scene, the system may adjust the size ofthe virtual object to appropriately scale the object. In FIG. 5E, forexample, the size of the virtual object is reduced as it is moved to thebackground of the scene, relative to its larger size in the foregroundof the scene in FIG. 5C. Additionally, the system may display animationsor other effects during and/or after input by a user. In FIGS. 5D and5E, for example, trails of animated stars are displayed as the virtualobject 505 is moved.

As noted above, the system may modify characteristics of virtual objects(420) in response to various events, including changes in the image,date, time, geolocation information, the context of events occurringwithin the image, and others. In some embodiments input to the systemmay be received from one or more sensors, and the system may modifycharacteristics of the virtual object in response. In one embodiment, amobile computing device implementing the functionality of method 400includes an inertial measurement sensor (such as an accelerometer) thatdetects movement of mobile computing device. In FIG. 5F, for example, avirtual object 510 (a cat) is displayed sitting on the floor of areal-world scene captured by the camera of the user's smartphone. InFIG. 5G, the user moves toward the virtual object's mapped position inthe real-world scene. As the mobile device (carried by the user) getscloser to the virtual object 510, the system increases the size ofobject 510, just as a physical object would appear larger to a user asthe user approached it. In response to the mobile device approachingwithin a predetermined distance of the virtual object's mapped positionin the real-world scene, the system triggers a reaction in the virtualobject 510, namely the cat waving it's paw to the user and displaying “OHai” text above the cat's head. The system may detect other types ofevents as well, such as a collision or contact between a virtual objectin an image and a physical element (such as the user's hand or otherbody part) and invoke behavior for the virtual object in response.

Embodiments of the present disclosure may measure a variety of differenttypes of movement of the system, such as a change in elevation, rotationof the system about an axis, movement/repositioning of the system fromone position to another, the speed of movement of the system, the changein speed of the system (e.g., acceleration or deceleration), etc.Embodiments of the present disclosure may also update the presentationof the virtual object within the image as the system moves relative tothe virtual object's mapped position within the real-world. For example,a virtual object may be mapped to a fixed position on the ground infront of a user holding a mobile computing device, such as the rainbow505 depicted in FIG. 5B. The user may move in a circle around thevirtual object 505 (with the camera of the mobile device fixed on thevirtual object 505), and the system updates the displayed perspective ofthe object to reflect the changing position of the user's mobile devicerelative to the virtual object. For example, the system displays thesmiling face of the rainbow 505 as the user stands in front of therainbow, but modifies the view of the rainbow to show its sides and rearas the user moves around the object 505.

The display of virtual objects may be performed for a limited,predetermined time period or based on event criteria. For example, inthe case of the examples shown in FIGS. 5F-5G, the cat may be displayedwithin the image for a predetermined period of time unless the userinteracts with the cat in some manner (e.g., within an hour), otherwisethe cat may be depicted as walking away (e.g, leaving the image).

The system may display images containing virtual objects as part of, orin conjunction with, a variety of media content items. In this context,a “media content item” may include any type of electronic media in anyformat. For example, a media content item may include an image in JPGformat, an image in PNG format, a video in FLV format, a video in AVIformat, etc. In some exemplary embodiments, a media content item mayinclude content that is captured using an image capture device orcomponent (such as a digital camera) coupled to, or in communicationwith, a system performing the functionality of method 400. In theexemplary system 700 depicted in FIG. 7 may include a digital camera asone of input components 728. Additionally or alternatively, the mediacontent item may be received from another system or device. In FIG. 1 ,for example, a client device 102 performing the functionality of method400 may receive a media content item from another client device 102 orother system via network 106.

In some embodiments, the media content item generated or used by thesystem may be included in a media overlay such as a “sticker” (i.e., animage that can be overlaid onto other images), filter (discussed above),or another media overlay. Such overlays may include static (i.e.,non-moving) features as well as dynamic (i.e., moving) features.Generation of media content items by embodiments of the presentdisclosure may include the generation of one or more data structurefields containing information regarding the content item. For example,the system may generate a name field in a data structure for the mediaoverlay that includes a name for the media content item received fromthe content provider. Media content items may be shared in real-time ornear-real time with other computing devices and systems.

Embodiments of the present disclosure may transmit and receiveelectronic communications containing media content items, mediaoverlays, or other content any form of electronic communication, such asSMS texts, MMS texts, emails, and other communications. Media contentitems included in such communications may be provided as attachments,displayed inline in the message, within media overlays, or conveyed inany other suitable manner.

Software Architecture

FIG. 6 is a block diagram illustrating an exemplary softwarearchitecture 606, which may be used in conjunction with various hardwarearchitectures herein described. FIG. 6 is a non-limiting example of asoftware architecture and it will be appreciated that many otherarchitectures may be implemented to facilitate the functionalitydescribed herein. The software architecture 606 may execute on hardwaresuch as machine 700 of FIG. 7 that includes, among other things,processors 704, memory 714, and I/O components 718. A representativehardware layer 652 is illustrated and can represent, for example, themachine 700 of FIG. 7 . The representative hardware layer 652 includes aprocessing unit 654 having associated executable instructions 604.Executable instructions 604 represent the executable instructions of thesoftware architecture 606, including implementation of the methods,components and so forth described herein. The hardware layer 652 alsoincludes memory or storage modules memory/storage 656, which also haveexecutable instructions 604. The hardware layer 652 may also compriseother hardware 658.

As used herein, the term “component” may refer to a device, physicalentity or logic having boundaries defined by function or subroutinecalls, branch points, application program interfaces (APIs), or othertechnologies that provide for the partitioning or modularization ofparticular processing or control functions. Components may be combinedvia their interfaces with other components to carry out a machineprocess. A component may be a packaged functional hardware unit designedfor use with other components and a part of a program that usuallyperforms a particular function of related functions.

Components may constitute either software components (e.g., codeembodied on a machine-readable medium) or hardware components. A“hardware component” is a tangible unit capable of performing certainoperations and may be configured or arranged in a certain physicalmanner. In various exemplary embodiments, one or more computer systems(e.g., a standalone computer system, a client computer system, or aserver computer system) or one or more hardware components of a computersystem (e.g., a processor or a group of processors) may be configured bysoftware (e.g., an application or application portion) as a hardwarecomponent that operates to perform certain operations as describedherein. A hardware component may also be implemented mechanically,electronically, or any suitable combination thereof. For example, ahardware component may include dedicated circuitry or logic that ispermanently configured to perform certain operations.

A hardware component may be a special-purpose processor, such as aField-Programmable Gate Array (FPGA) or an Application SpecificIntegrated Circuit (ASIC). A hardware component may also includeprogrammable logic or circuitry that is temporarily configured bysoftware to perform certain operations. For example, a hardwarecomponent may include software executed by a general-purpose processoror other programmable processor. Once configured by such software,hardware components become specific machines (or specific components ofa machine) uniquely tailored to perform the configured functions and areno longer general-purpose processors. It will be appreciated that thedecision to implement a hardware component mechanically, in dedicatedand permanently configured circuitry, or in temporarily configuredcircuitry (e.g., configured by software) may be driven by cost and timeconsiderations.

A processor may be, or in include, any circuit or virtual circuit (aphysical circuit emulated by logic executing on an actual processor)that manipulates data values according to control signals (e.g.,“commands”, “op codes”, “machine code”, etc.) and which producescorresponding output signals that are applied to operate a machine. Aprocessor may, for example, be a Central Processing Unit (CPU), aReduced Instruction Set Computing (RISC) processor, a ComplexInstruction Set Computing (CISC) processor, a Graphics Processing Unit(GPU), a Digital Signal Processor (DSP), an Application SpecificIntegrated Circuit (ASIC), a Radio-Frequency Integrated Circuit (RFIC)or any combination thereof. A processor may further be a multi-coreprocessor having two or more independent processors (sometimes referredto as “cores”) that may execute instructions contemporaneously.

Accordingly, the phrase “hardware component” (or “hardware-implementedcomponent”) should be understood to encompass a tangible entity, be thatan entity that is physically constructed, permanently configured (e.g.,hardwired), or temporarily configured (e.g., programmed) to operate in acertain manner or to perform certain operations described herein.Considering embodiments in which hardware components are temporarilyconfigured (e.g., programmed), each of the hardware components need notbe configured or instantiated at any one instance in time. For example,where a hardware component comprises a general-purpose processorconfigured by software to become a special-purpose processor, thegeneral-purpose processor may be configured as respectively differentspecial-purpose processors (e.g., comprising different hardwarecomponents) at different times. Software accordingly configures aparticular processor or processors, for example, to constitute aparticular hardware component at one instance of time and to constitutea different hardware component at a different instance of time. Hardwarecomponents can provide information to, and receive information from,other hardware components. Accordingly, the described hardwarecomponents may be regarded as being communicatively coupled. Wheremultiple hardware components exist contemporaneously, communications maybe achieved through signal transmission (e.g., over appropriate circuitsand buses) between or among two or more of the hardware components. Inembodiments in which multiple hardware components are configured orinstantiated at different times, communications between such hardwarecomponents may be achieved, for example, through the storage andretrieval of information in memory structures to which the multiplehardware components have access.

For example, one hardware component may perform an operation and storethe output of that operation in a memory device to which it iscommunicatively coupled. A further hardware component may then, at alater time, access the memory device to retrieve and process the storedoutput. Hardware components may also initiate communications with inputor output devices, and can operate on a resource (e.g., a collection ofinformation). The various operations of example methods described hereinmay be performed, at least partially, by one or more processors that aretemporarily configured (e.g., by software) or permanently configured toperform the relevant operations. Whether temporarily or permanentlyconfigured, such processors may constitute processor-implementedcomponents that operate to perform one or more operations or functionsdescribed herein. As used herein, “processor-implemented component”refers to a hardware component implemented using one or more processors.Similarly, the methods described herein may be at least partiallyprocessor-implemented, with a particular processor or processors beingan example of hardware. For example, at least some of the operations ofa method may be performed by one or more processors orprocessor-implemented components.

Moreover, the one or more processors may also operate to supportperformance of the relevant operations in a “cloud computing”environment or as a “software as a service” (SaaS). For example, atleast some of the operations may be performed by a group of computers(as examples of machines including processors), with these operationsbeing accessible via a network (e.g., the Internet) and via one or moreappropriate interfaces (e.g., an Application Program Interface (API)).The performance of certain of the operations may be distributed amongthe processors, not only residing within a single machine, but deployedacross a number of machines. In some exemplary embodiments, theprocessors or processor-implemented components may be located in asingle geographic location (e.g., within a home environment, an officeenvironment, or a server farm). In other exemplary embodiments, theprocessors or processor-implemented components may be distributed acrossa number of geographic locations.

In the exemplary architecture of FIG. 6 , the software architecture 606may be conceptualized as a stack of layers where each layer providesparticular functionality. For example, the software architecture 606 mayinclude layers such as an operating system 602, libraries 620,applications 616 and a presentation layer 614. Operationally, theapplications 616 or other components within the layers may invokeapplication programming interface (API) API calls 608 through thesoftware stack and receive messages 612 in response to the API calls608. The layers illustrated are representative in nature and not allsoftware architectures have all layers. For example, some mobile orspecial purpose operating systems may not provide aframeworks/middleware 618, while others may provide such a layer. Othersoftware architectures may include additional or different layers.

The operating system 602 may manage hardware resources and providecommon services. The operating system 602 may include, for example, akernel 622, services 624 and drivers 626. The kernel 622 may act as anabstraction layer between the hardware and the other software layers.For example, the kernel 622 may be responsible for memory management,processor management (e.g., scheduling), component management,networking, security settings, and so on. The services 624 may provideother common services for the other software layers. The drivers 626 areresponsible for controlling or interfacing with the underlying hardware.For instance, the drivers 626 include display drivers, camera drivers,Bluetooth® drivers, flash memory drivers, serial communication drivers(e.g., Universal Serial Bus (USB) drivers), Wi-Fi® drivers, audiodrivers, power management drivers, and so forth depending on thehardware configuration.

The libraries 620 provide a common infrastructure that is used by theapplications 616 or other components or layers. The libraries 620provide functionality that allows other software components to performtasks in an easier fashion than to interface directly with theunderlying operating system 602 functionality (e.g., kernel 622,services 624 or drivers 626). The libraries 620 may include systemlibraries 644 (e.g., C standard library) that may provide functions suchas memory allocation functions, string manipulation functions,mathematical functions, and the like. In addition, the libraries 620 mayinclude API libraries 646 such as media libraries (e.g., libraries tosupport presentation and manipulation of various media format such asMPREG4, H.264, MP3, AAC, AMR, JPG, PNG), graphics libraries (e.g., anOpenGL framework that may be used to render 2D and 3D in a graphiccontent on a display), database libraries (e.g., SQLite that may providevarious relational database functions), web libraries (e.g., WebKit thatmay provide web browsing functionality), and the like. The libraries 620may also include a wide variety of other libraries 648 to provide manyother APIs to the applications 616 and other softwarecomponents/modules.

The frameworks/middleware 618 (also sometimes referred to as middleware)provide a higher-level common infrastructure that may be used by theapplications 616 or other software components/modules. For example, theframeworks/middleware 618 may provide various graphic user interface(GUI) functions, high-level resource management, high-level locationservices, and so forth. The frameworks/middleware 618 may provide abroad spectrum of other APIs that may be utilized by the applications616 or other software components/modules, some of which may be specificto a particular operating system 602 or platform.

The applications 616 include built-in applications 638 or third-partyapplications 640. Examples of representative built-in applications 638may include, but are not limited to, a contacts application, a browserapplication, a book reader application, a location application, a mediaapplication, a messaging application, or a game application. Third-partyapplications 640 may include an application developed using the ANDROID™or IOS™ software development kit (SDK) by an entity other than thevendor of the particular platform, and may be mobile software running ona mobile operating system such as IOS™, ANDROID™, WINDOWS® Phone, orother mobile operating systems. The third-party applications 640 mayinvoke the API calls 608 provided by the mobile operating system (suchas operating system 602) to facilitate functionality described herein.

The applications 616 may use built in operating system functions (e.g.,kernel 622, services 624 or drivers 626), libraries 620, andframeworks/middleware 618 to create user interfaces to interact withusers of the system. Alternatively, or additionally, in some systemsinteractions with a user may occur through a presentation layer, such aspresentation layer 614. In these systems, the application/component“logic” can be separated from the aspects of the application/componentthat interact with a user.

FIG. 7 is a block diagram illustrating components (also referred toherein as “modules”) of a machine 700, according to some exemplaryembodiments, able to read instructions from a machine-readable medium(e.g., a machine-readable storage medium) and perform any one or more ofthe methodologies discussed herein. Specifically, FIG. 7 shows adiagrammatic representation of the machine 700 in the example form of acomputer system, within which instructions 710 (e.g., software, aprogram, an application, an applet, an app, or other executable code)for causing the machine 700 to perform any one or more of themethodologies discussed herein may be executed. As such, theinstructions 710 may be used to implement modules or componentsdescribed herein. The instructions 710 transform the general,non-programmed machine 700 into a particular machine 700 programmed tocarry out the described and illustrated functions in the mannerdescribed. In alternative embodiments, the machine 700 operates as astandalone device or may be coupled (e.g., networked) to other machines.In a networked deployment, the machine 700 may operate in the capacityof a server machine or a client machine in a server-client networkenvironment, or as a peer machine in a peer-to-peer (or distributed)network environment. The machine 700 may comprise, but not be limitedto, a server computer, a client computer, a personal computer (PC), atablet computer, a laptop computer, a netbook, a set-top box (STB), apersonal digital assistant (PDA), an entertainment media system, acellular telephone, a smart phone, a mobile device, a wearable device(e.g., a smart watch), a smart home device (e.g., a smart appliance),other smart devices, a web appliance, a network router, a networkswitch, a network bridge, or any machine capable of executing theinstructions 710, sequentially or otherwise, that specify actions to betaken by machine 700. Further, while only a single machine 700 isillustrated, the term “machine” shall also be taken to include acollection of machines that individually or jointly execute theinstructions 710 to perform any one or more of the methodologiesdiscussed herein.

The machine 700 may include processors 704, memory memory/storage 706,and I/O components 718, which may be configured to communicate with eachother such as via a bus 702. The memory/storage 706 may include a memory714, such as a main memory, or other memory storage, and a storage unit716, both accessible to the processors 704 such as via the bus 702. Thestorage unit 716 and memory 714 store the instructions 710 embodying anyone or more of the methodologies or functions described herein. Theinstructions 710 may also reside, completely or partially, within thememory 714, within the storage unit 716, within at least one of theprocessors 704 (e.g., within the processor's cache memory), or anysuitable combination thereof, during execution thereof by the machine700. Accordingly, the memory 714, the storage unit 716, and the memoryof processors 704 are examples of machine-readable media.

As used herein, the term “machine-readable medium,” “computer-readablemedium,” or the like may refer to any component, device or othertangible media able to store instructions and data temporarily orpermanently. Examples of such media may include, but is not limited to,random-access memory (RAM), read-only memory (ROM), buffer memory, flashmemory, optical media, magnetic media, cache memory, other types ofstorage (e.g., Erasable Programmable Read-Only Memory (EEPROM)) or anysuitable combination thereof. The term “machine-readable medium” shouldbe taken to include a single medium or multiple media (e.g., acentralized or distributed database, or associated caches and servers)able to store instructions. The term “machine-readable medium” may alsobe taken to include any medium, or combination of multiple media, thatis capable of storing instructions (e.g., code) for execution by amachine, such that the instructions, when executed by one or moreprocessors of the machine, cause the machine to perform any one or moreof the methodologies described herein. Accordingly, a “machine-readablemedium” may refer to a single storage apparatus or device, as well as“cloud-based” storage systems or storage networks that include multiplestorage apparatus or devices. The term “machine-readable medium”excludes signals per se.

The I/O components 718 may include a wide variety of components toprovide a user interface for receiving input, providing output,producing output, transmitting information, exchanging information,capturing measurements, and so on. The specific I/O components 718 thatare included in the user interface of a particular machine 700 willdepend on the type of machine. For example, portable machines such asmobile phones will likely include a touch input device or other suchinput mechanisms, while a headless server machine will likely notinclude such a touch input device. It will be appreciated that the I/Ocomponents 718 may include many other components that are not shown inFIG. 7 . The I/O components 718 are grouped according to functionalitymerely for simplifying the following discussion and the grouping is inno way limiting. In various exemplary embodiments, the I/O components718 may include output components 726 and input components 728. Theoutput components 726 may include visual components (e.g., a displaysuch as a plasma display panel (PDP), a light emitting diode (LED)display, a liquid crystal display (LCD), a projector, or a cathode raytube (CRT)), acoustic components (e.g., speakers), haptic components(e.g., a vibratory motor, resistance mechanisms), other signalgenerators, and so forth. The input components 728 may includealphanumeric input components (e.g., a keyboard, a touch screenconfigured to receive alphanumeric input, a photo-optical keyboard, orother alphanumeric input components), point based input components(e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, orother pointing instrument), tactile input components (e.g., a physicalbutton, a touch screen that provides location or force of touches ortouch gestures, or other tactile input components), audio inputcomponents (e.g., a microphone), and the like. The input components 728may also include one or more image-capturing devices, such as a digitalcamera for generating digital images or video.

In further exemplary embodiments, the I/O components 718 may includebiometric components 730, motion components 734, environmentalenvironment components 736, or position components 738, as well as awide array of other components. One or more of such components (orportions thereof) may collectively be referred to herein as a “sensorcomponent” or “sensor” for collecting various data related to themachine 700, the environment of the machine 700, a user of the machine700, or a combinations thereof.

For example, the biometric components 730 may include components todetect expressions (e.g., hand expressions, facial expressions, vocalexpressions, body gestures, or eye tracking), measure biosignals (e.g.,blood pressure, heart rate, body temperature, perspiration, or brainwaves), identify a person (e.g., voice identification, retinalidentification, facial identification, fingerprint identification, orelectroencephalogram based identification), and the like. The motioncomponents 734 may include acceleration sensor components (e.g.,accelerometer), gravitation sensor components, velocity sensorcomponents (e.g., speedometer), rotation sensor components (e.g.,gyroscope), and so forth. The environment components 736 may include,for example, illumination sensor components (e.g., photometer),temperature sensor components (e.g., one or more thermometer that detectambient temperature), humidity sensor components, pressure sensorcomponents (e.g., barometer), acoustic sensor components (e.g., one ormore microphones that detect background noise), proximity sensorcomponents (e.g., infrared sensors that detect nearby objects), gassensors (e.g., gas detection sensors to detection concentrations ofhazardous gases for safety or to measure pollutants in the atmosphere),or other components that may provide indications, measurements, orsignals corresponding to a surrounding physical environment. Theposition components 738 may include location sensor components (e.g., aGlobal Position system (GPS) receiver component), altitude sensorcomponents (e.g., altimeters or barometers that detect air pressure fromwhich altitude may be derived), orientation sensor components (e.g.,magnetometers), and the like. For example, the location sensor componentmay provide location information associated with the system 700, such asthe system's 700 GPS coordinates or information regarding a location thesystem 700 is at currently (e.g., the name of a restaurant or otherbusiness).

Communication may be implemented using a wide variety of technologies.The I/O components 718 may include communication components 740 operableto couple the machine 700 to a network 732 or devices 720 via coupling722 and coupling 724 respectively. For example, the communicationcomponents 740 may include a network interface component or othersuitable device to interface with the network 732. In further examples,communication components 740 may include wired communication components,wireless communication components, cellular communication components,Near Field Communication (NFC) components, Bluetooth® components (e.g.,Bluetooth® Low Energy), Wi-Fi® components, and other communicationcomponents to provide communication via other modalities. The devices720 may be another machine or any of a wide variety of peripheraldevices (e.g., a peripheral device coupled via a Universal Serial Bus(USB)).

Moreover, the communication components 740 may detect identifiers orinclude components operable to detect identifiers. For example, thecommunication components 740 may include Radio Frequency Identification(RFID) tag reader components, NFC smart tag detection components,optical reader components (e.g., an optical sensor to detectone-dimensional bar codes such as Universal Product Code (UPC) bar code,multi-dimensional bar codes such as Quick Response (QR) code, Azteccode, Data Matrix, Dataglyph, MaxiCode, PDF417, Ultra Code, UCC RSS-2Dbar code, and other optical codes), or acoustic detection components(e.g., microphones to identify tagged audio signals). In addition, avariety of information may be derived via the communication components740, such as, location via Internet Protocol (IP) geo-location, locationvia Wi-Fi® signal triangulation, location via detecting a NFC beaconsignal that may indicate a particular location, and so forth.

Where a phrase similar to “at least one of A, B, or C,” “at least one ofA, B, and C,” “one or more A, B, or C,” or “one or more of A, B, and C”is used, it is intended that the phrase be interpreted to mean that Aalone may be present in an embodiment, B alone may be present in anembodiment, C alone may be present in an embodiment, or that anycombination of the elements A, B and C may be present in a singleembodiment; for example, A and B, A and C, B and C, or A and B and C.

As used herein, the term “or” may be construed in either an inclusive orexclusive sense. Moreover, plural instances may be provided forresources, operations, or structures described herein as a singleinstance. Additionally, boundaries between various resources,operations, modules, engines, and data stores are somewhat arbitrary,and particular operations are illustrated in a context of specificillustrative configurations. Other allocations of functionality areenvisioned and may fall within a scope of various embodiments of thepresent disclosure. In general, structures and functionality presentedas separate resources in the example configurations may be implementedas a combined structure or resource. Similarly, structures andfunctionality presented as a single resource may be implemented asseparate resources. These and other variations, modifications,additions, and improvements fall within a scope of embodiments of thepresent disclosure as represented by the appended claims. Thespecification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense.

A portion of the disclosure of this patent document contains materialthat is subject to copyright protection. The copyright owner has noobjection to the facsimile reproduction by anyone of the patent documentor the patent disclosure, as it appears in the Patent and TrademarkOffice patent files or records, but otherwise reserves all copyrightrights whatsoever. The following notice applies to the software and dataas described below and in the drawings that form a part of thisdocument: Copyright 2016, SNAP, INC. 2016, All Rights Reserved.

What is claimed is:
 1. A computer-implemented method, comprising:generating, by one or more processors, a matrix using image data from acamera of a mobile computing device and movement data from an inertialmeasurement sensor of the mobile computing device; tracking, by the oneor more processors, a movement of the mobile computing device using themovement data; generating, by the one or more processors, a virtualpainting using the matrix and the movement of the mobile computingdevice; displaying, by the one or more processors, on a display screenof the mobile device, the virtual painting in conjunction with areal-world scene captured by the camera; tracking, by the one or moreprocessors, using the inertial measurement sensor, a forward movementand a backward movement of the mobile computing device in threedimensions; and giving, by the one or more processors, athree-dimensional appearance to the virtual painting using the forwardmovement and the backward movement.
 2. The computer-implemented methodof claim 1, wherein the movement of the mobile computing device includesat least one of rotation about an axis or repositioning the system froma first physical location to a second physical location.
 3. Thecomputer-implemented method of claim 1, wherein displaying the virtualpainting in conjunction with the real-world scene comprises displayingthe virtual paining in a fixed position relative to the real-world sceneduring the movement of the mobile computing device.
 4. Thecomputer-implemented method of claim 1, wherein displaying the paintingin conjunction with the real-world scene comprises modifying a displayedperspective of the painting as the user moves the system.
 5. Thecomputer-implemented method of claim 1, further comprising: receiving aninput from a user of the user sliding a finger of the user across atouchscreen of the mobile device; and moving the virtual painting from afirst position to a second position in response to the sliding of theuser's finger across the touchscreen.
 6. The computer-implemented methodof claim 5, wherein moving the virtual painting from the first positionto the second position comprises: identifying a spatial limit in thereal-world scene; and restricting movement of the virtual painting basedon the spatial limit.
 7. The computer-implemented method of claim 1,further comprising modifying a scale of at least a portion of thevirtual painting in response to an input from a user.
 8. A systemcomprising: at least one processor; and at least one memory storinginstructions that, when executed by the at least one processor, causethe system to perform operations comprising: generating, by one or moreprocessors, a matrix using image data from a camera of a mobilecomputing device and movement data from an inertial measurement sensorof the mobile computing device; tracking, by the one or more processors,a movement of the mobile computing device using the movement data;generating, by the one or more processors, a virtual painting using thematrix and the movement of the mobile computing device; displaying, bythe one or more processors, on a display screen of the mobile device,the virtual painting in conjunction with a real-world scene captured bythe camera; tracking, by the one or more processors, using the inertialmeasurement sensor, a forward movement and a backward movement of themobile computing device in three dimensions; and giving, by the one ormore processors, a three-dimensional appearance to the virtual paintingusing the forward movement and the backward movement.
 9. The system ofclaim 8, wherein the movement of the mobile computing device includes atleast one of rotation about an axis or repositioning the system from afirst physical location to a second physical location.
 10. The system ofclaim 8, wherein displaying the virtual painting in conjunction with thereal-world scene comprises displaying the virtual paining in a fixedposition relative to the real-world scene during the movement of themobile computing device.
 11. The system of claim 8, wherein displayingthe painting in conjunction with the real-world scene comprisesmodifying a displayed perspective of the painting as the user moves thesystem.
 12. The system of claim 8, wherein the operations furthercomprise: receiving an input from a user of the user sliding a finger ofthe user across a touchscreen of the mobile device; and moving thevirtual painting from a first position to a second position in responseto the sliding of the user's finger across the touchscreen.
 13. Thesystem of claim 12, wherein moving the virtual painting from the firstposition to the second position comprises: identifying a spatial limitin the real-world scene; and restricting movement of the virtualpainting based on the spatial limit.
 14. The system of claim 8, whereinthe operations further comprise modifying a scale of at least a portionof the virtual painting in response to an input from a user.
 15. Anon-transitory computer-readable medium storing instructions that, whenexecuted by at least one processor of a system, cause the system toperform operations comprising: generate, by one or more processors, amatrix using image data from a camera of a mobile computing device andmovement data from an inertial measurement sensor of the mobilecomputing device; track, by the one or more processors, a movement ofthe mobile computing device using the movement data; generate, by theone or more processors, a virtual painting using the matrix and themovement of the mobile computing device; display, by the one or moreprocessors, on a display screen of the mobile device, the virtualpainting in conjunction with a real-world scene captured by the camera;track, by the one or more processors, using the inertial measurementsensor, a forward movement and a backward movement of the mobilecomputing device in three dimensions; and give, by the one or moreprocessors, a three-dimensional appearance to the virtual painting usingthe forward movement and the backward movement.
 16. The non-transitorycomputer-readable medium of claim 15, wherein the movement of the mobilecomputing device includes at least one of rotation about an axis orreposition the system from a first physical location to a secondphysical location.
 17. The non-transitory computer-readable medium ofclaim 15, wherein displaying the virtual paint in conjunction with thereal-world scene comprises displaying the virtual paining in a fixedposition relative to the real-world scene during the movement of themobile computing device.
 18. The non-transitory computer-readable mediumof claim 15, wherein displaying the painting in conjunction with thereal-world scene comprises modify a displayed perspective of thepainting as the user moves the system.
 19. The non-transitorycomputer-readable medium of claim 15, wherein the operations furthercomprise: receiving an input from a user of the user sliding a finger ofthe user across a touchscreen of the mobile device; and moving thevirtual painting from a first position to a second position in responseto the sliding of the user's finger across the touchscreen.
 20. Thenon-transitory computer-readable medium of claim 19, wherein theoperations further comprise: identifying a spatial limit in thereal-world scene; and restricting movement of the virtual painting basedon the spatial limit.